package com.atguigu1.core.operator

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 *
 * @description: 分区内取最大值,分区间取最大值求和
 * @time: 2021-03-12 11:45
 * @author: baojinlong
 **/
object Spark14Distinct {
  def main(args: Array[String]): Unit = {
    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("rdd")
    // 设置rdd分区数字
    val sparkContext = new SparkContext(conf)
    val rddValue: RDD[Int] = sparkContext.makeRDD(List(1, 2, 3, 2, 4, 5, 2, 3, 4, 5, 6, 7, 8, 9, 10))
    /*
       第一个参数表示:抽取数据是否将数据返回 true 放回 false丢弃
       第二个参数表示:如果抽取不放回的场合:数据源中每条数据被抽取的概率基准值的概念
       如果抽取放回的场合:表示数据源中的每条数据被抽取的可能次数
       第三个参数表示:抽取数据时随机算法的种子,如果不传递第三个参数那么选择系统的时间
     */
    rddValue.distinct.collect.foreach(println)
    // 实现方法: map(x => (x, null)).reduceByKey((x, y) => x, numPartitions).map(_._1)
    // (1,null) (1,null) (2,null) (2,null)
    // (1,null) 1 2 3
    sparkContext.stop()
  }
}
